当前位置:flash课件吧→FLASH8.0教程→ flash cs3视频教程 flashcs3教程 flash cs3教程下载 flashcs3视频教程 flash cs3 pro教程 flash cs3教程网 flash cs3 实例教程 flashcs3教程下载 flash cs3教程 pdf flash cs3按钮教程 | ||||||||||||||||||||||||||||||||||||||||
题 目:谈Flash课件中的拖动方案 Flash MX制作交互式的flash课件时,很多场合都需要用到拖动。在Flash MX中主要的拖动方式有以下三种:无任何约束的拖动、限制在某一矩形范围内的拖动、限制在某一路径上的拖动。下面通过实例加以说明。 (2)画一个圆,最好是让圆心和影片剪接的中心对齐。 (3)选择主场景,按F11打开“库”面板,将刚制作好的球拖动至主场景中。 (4)选择主场景中的球,打开窗口下方的“属性”面板,在名称框内输入名称ball。 (5)右击ball,选择“动作”命令,在代码编辑框内输入: on(press) { startDrag("",true);//允许拖动ball } on(release, releaseOutside) { stopDrag();//释放鼠标时,停止拖动ball } (6)拖动ball,我们将看到ball可以拖动到场景中的任意位置,释放鼠标时,ball将停止拖动。 2.约束某一矩形范围内的拖动 将以上代码改为: on(press) 在某些场合,如通过拖动动态生成数学函数图像时,因为函数图像都有一个函数式约束,决定了以上两种方法都不可行。这种拖动的关键在于要根据约束条件来决定被拖动对象的位置。下面以动态生成圆来说明此类拖动问题的解决方法。 (2)转到主场景,新增一图层,将两图层分别命名为“脚本”和“对象”。 (3)选择“对象”时间轴,在场景中加入两个“点”的实例,在它们的属性面板中分别命名为“yuanxi”(表示圆心)和“dian”(表示圆周上的点),让它们适当保持一定的距离,并且让“yuanxi”位于场景的中央。 (4)右击“脚本”层第一帧,选择“动作”,在代码编辑窗口内输入以下脚本: drag_flag=false;//拖动标志 x0=yuanxin._x; y0=yuanxin._y; dian_x=dian._x; dian_y=dian._y; //计算圆的半径,这就是拖动圆周的点的约束条件,被拖动的点到圆心的距离等于半径。 r=Math.sqrt((x0-dian_x)*(x0-dian_x)+(y0-dian_y)*(y0-dian_y)); _root.onEnterFrame =function() { if (drag_flag) { x = _xmouse; y = _ymouse; angle=Math.atan(Math.abs(y0-y)/Math.abs(x-x0)); dian_x=x0+r*Math.cos(angle); dian_y=y0-r*Math.sin(angle); //第一象限 if((x>=x0) &&&& (y<=y0)) { dian_x = x0+r*Math.cos(angle); dian_y = y0-r*Math.sin(angle); depth=angle*180/3.14159; }
{ //限制拖动范围为(0,0)到(100,100)之间,注意坐标原点位于场景中的左上角。 startDrag("",true,0,0,100,100); } on(release, releaseOutside) { stopDrag(); } 再拖动ball,将看到ball被限制在某一区域内拖动。 //第二象限 if((x<=x0) &&&& (y<=y0)) { dian_y=y0-r*Math.sin(angle); depth=angle*180/3.14159+90; } //第三象限 if((x<=x0) &&&& (y>=y0)) { on(press) { } on(release, releaseOutside) { _root.drag_flag=false;//在dian实例上松开鼠标左键,置拖动标志为假。 } (6)测试影片,拖动dian实例,将看到在场景中会画出一个由点构成的圆。 从此例可以看出,实现沿某一路径的拖动,关键是要通过约束条件找到拖动时的对象的坐标。
dian_x=x0-r*Math.cos(angle); dian_y=y0+r*Math.sin(angle); depth=angle*180/3.14159+180; } //第四象限 if((x>=x0) &&&& (y>=y0)) { dian_x=x0+r*Math.cos(angle); dian_y=y0+r*Math.sin(angle); depth=angle*180/3.14159+270; } duplicateMovieClip("dian","dian" add depth,depth); _root["dian" add depth]._x=dian_x; _root["dian" add depth]._y=dian_y; _root.clear(); _root.moveTo(x0,y0); _root.lineStyle(1,0xff0000,100); _root.lineTo(dian_x,dian_y); } }
|
||||||||||||||||||||||||||||||||||||||||
|